# @Time : 2024-11-02 17:03
# @Author : Fioman 
# @Phone : 13149920693
"""
多进程: multiprocessing, 利用多核CPU的能力,真正的并行执行任务.
1) 调度机制: 由操作系统调用,进程并发执行
2) 内存占用: 最大,每个进程有独立的内存空间
3) 数据共享: 复杂,进程间通信需要使用IPC机制
4) 执行效率: 高,适合CPU密集型任务,无GIL限制
5) 并发模型: 并行计算,适合多核CPU,提高计算效率
6) 编程复杂度: 高,进程间通信和资源共享更复杂
7) 异常处理: 复杂,一个进程的死亡可能影响子进程
8) 使用场景: CPU密集型任务,如数据处理,科学计算
"""

"""
多进程使用场景:
1) CPU密集型任务
需要进行大量的计算，例如图像处理、科学计算、数据分析等。
多线程无法充分利用多核CPU，因为GIL的存在会限制多个线程的并行执行。
2) 独立任务
不需要共享太多状态信息的任务，例如独立的文件处理任务。
各个任务之间没有或只有很少的依赖关系。
"""
import multiprocessing


def print_numbers():
    for i in range(10):
        print("Number: ", i)


def print_letters():
    for letter in "Abcde":
        print("Letter: ", letter)


if __name__ == '__main__':
    # 创建进程的时候要在main函数中创建
    p1 = multiprocessing.Process(target=print_numbers)
    p2 = multiprocessing.Process(target=print_letters)

    # 启动进程
    p1.start()
    p2.start()

    # 等待进程结束
    p1.join()
    p2.join()

    print("两个进程都结束了")
